Hologres兼容PostgreSQL,支持使用标准的PostgreSQL语法进行开发,本文为您介绍Hologres已支持的数组(ARRAY)函数列表及使用用例。
函数 | 功能 |
将一列的多行数据聚合成一个数组。 | |
添加元素至数组的尾部。 | |
连接两个数组。 | |
确认数组是否包含指定值。 | |
获取数组文本类型的维度数。 | |
去除数组中的重复元素。 | |
获取不包含指定数组元素的数组。 | |
获取请求的数组维度的长度。 | |
获取请求的数组维度的下限。 | |
获取数组中所有数据的最大值,计算过程中会跳过NULL值。 | |
获取数组中所有数据的最小值。 | |
获取数组的维度数。 | |
从数组中删除所有等于指定值的元素(数组必须是一维的)。 | |
获取数组(数组必须是一维的)中指定元素的下标。 | |
添加元素至数组的首位。 | |
对数组元素进行排序。 | |
使用提供的分隔符连接数组元素,如果数组中有NULL元素,可以自定义如何表示数组中的NULL值。 | |
将两个数组聚合为一个新的数组,且不含重复元素。 | |
获取请求的数组维度的上限。 | |
对字符串按正则表达式进行匹配,如果存在则会在结果数组中表示出来。 | |
字符串分割函数,按正则表达式对字符串进行分割并转换成数组。 | |
将数组的每个元素扩展为单独行。 |
使用限制
array_max
、array_min
、array_contains
、array_except
、array_distinct
、array_union
函数暂不支持常量查询,例如:SELECT array_max(ARRAY[-2, NULL, -3, -12, -7]);
。
数组(Array)函数
ARRAY_TO_STRING
描述:使用提供的分隔符连接数组元素,如果数组中有NULL元素,可以自定义如何表示数组中的NULL值。
array_to_string(anyarray, text[, text])
返回值说明
返回TEXT类型。
示例
--返回结果:1,2,3 SELECT array_to_string(ARRAY[1, 2, 3], ',')
ARRAY_AGG
描述:将一列的多行数据聚合成一个数组。
方式一:
array_agg(anyelement)
使用说明:
仅HologresV1.3及以上版本支持DECIMAL、DATE、TIMESTAMP、TIMESTAMPTZ数据类型。
说明若您Hologres实例的版本较低,请您使用实例升级或加入Hologres钉钉交流群反馈,详情请参见如何获取更多的在线支持?。
暂不支持JSON、JSONB、TIMETZ、INTERVAL、INET、OID、UUID和ARRAY类型。
方式二:
array_agg (expression[ order_by_clause ] ) [ FILTER ( WHERE filter_clause ) ]
使用说明:
仅HologresV1.3及以上版本支持
FILTER
过滤。说明若您Hologres实例的版本较低,请您使用实例升级或加入Hologres钉钉交流群反馈,详情请参见如何获取更多的在线支持?。
返回值说明
返回ARRAY类型。
示例
示例1(
array_agg(anyelement)
)CREATE TABLE test_array_agg_int ( c1 int ); INSERT INTO test_array_agg_int VALUES (1), (2); SELECT array_agg (c1) FROM test_array_agg_int;
返回结果如下。
array_agg ----------- {2,1} (1 row)
示例2(
FILTER
):CREATE TABLE test_array_agg_int ( c1 int ); INSERT INTO test_array_agg_int VALUES (1), (2); SELECT array_agg (c1) filter (where c1 >1) FROM test_array_agg_int;
返回结果如下。
array_agg ----------- {2} (1 row)
ARRAY_APPEND
描述:添加元素至数组的尾部。
array_append(anyarray, anyelement)
返回值说明
返回ARRAY类型。
示例
--返回结果:{1,2,3} SELECT array_append(ARRAY[1,2], 3);
ARRAY_CAT
描述:连接两个数组。
array_cat(anyarray,anyarray)
返回值说明
返回ARRAY类型。
示例
--返回结果:{1,2,3,4,5} SELECT array_cat(ARRAY[1,2,3], ARRAY[4,5]);
ARRAY_NDIMS
描述:获取数组的维度数。
array_ndims(anyarray)
返回值说明
返回INT类型。
示例
--返回结果:2 SELECT array_ndims(ARRAY[[1,2,3], [4,5,6]]);
ARRAY_DIMS
描述:获取数组文本类型的维度数。
array_dims(anyarray)
返回值说明
返回TEXT类型。
示例
--返回结果:[1:2][1:3] SELECT array_dims(ARRAY[[1,2,3], [4,5,6]]);
ARRAY_LENGTH
描述:获取请求的数组维度的长度。
array_length(anyarray, int)
返回值说明
返回INT类型。
示例
--返回结果:3 SELECT array_length(ARRAY[1,2,3], 1);
ARRAY_LOWER
描述:获取请求的数组维度的下限。
array_lower(anyarray, int)
返回值说明
返回INT类型。
示例
--返回结果:0 SELECT array_lower('[0:2]={1,2,3}'::int[], 1);
ARRAY_POSITIONS
描述:获取数组(数组必须是一维的)中指定元素的下标。
array_positions(anyarray, anyelement)
返回值说明
返回ARRAY类型。
示例
--返回结果:{1,2,4} SELECT array_positions(ARRAY['A','A','B','A'], 'A');
ARRAY_PREPEND
描述:添加元素至数组的首位。
array_prepend(anyelement, anyarray)
返回值说明
返回ARRAY类型。
示例
--返回结果:{1,2,3} SELECT array_prepend(1, ARRAY[2,3]);
ARRAY_REMOVE
描述:从数组中删除所有等于指定值的元素(数组必须是一维的)。
array_remove(anyarray, anyelement)
返回值说明
返回ARRAY类型。
示例
--返回结果:{1,3} SELECT array_remove(ARRAY[1,2,3,2], 2);
ARRAY_SORT
描述:对数组元素进行排序。
array_sort(anyarray)
使用说明:
Hologres从V1.1.46版本开始支持TEXT类型数组,且TEXT数组将会被转为INT8数组进行排序,返回排序后的TEXT数组。
Hologres从V1.3.18版本开始支持INT4、INT8、FLOAT4、FLOAT8、BOOLEAN类型数组,且对TEXT类型数组按字典序排序。
返回值说明
返回ARRAY类型。
示例
--返回结果:{1,1,2,3} SELECT array_sort(ARRAY[1,3,2,1]);
ARRAY_UPPER
描述:获取请求的数组维度的上限。
array_upper(anyarray, int)
返回值说明
返回INT类型。
示例
--返回结果:4 SELECT array_upper(ARRAY[1,8,3,7], 1);
UNNEST
描述:将数组的每个元素扩展为单独行。
unnest(anyarray)
返回值说明
返回TEXT类型。
示例
SELECT unnest(ARRAY[1,2]);
返回结果如下。
unnest ------ 1 2 (2 rows)
ARRAY_MAX
描述:获取数组中所有数据的最大值,计算过程中会跳过NULL值。
array_max(array)
使用说明:
仅Hologres V1.3.19及以上版本支持该函数。
说明若您Hologres实例的版本较低,请您使用实例升级或加入Hologres钉钉交流群反馈,详情请参见如何获取更多的在线支持?。
返回值说明
返回INT类型。
示例
CREATE TABLE test_array_max_int ( c1 int[] ); INSERT INTO test_array_max_int VALUES (NULL), (ARRAY[-2, NULL, -3, -12, -7]); SELECT c1, array_max (c1) FROM test_array_max_int;
返回结果如下。
c1 | array_max ------------------+----------- \N |\N {-2,0,-3,-12,-7} | 0 (2 rows)
ARRAY_MIN
描述:获取数组中所有数据的最小值。
array_min(array)
使用说明:
仅Hologres V1.3.19及以上版本支持该函数。
说明若您Hologres实例的版本较低,请您使用实例升级或加入Hologres钉钉交流群反馈,详情请参见如何获取更多的在线支持?。
返回值说明
返回INT类型。
示例
CREATE TABLE test_array_min_text ( c1 text[] ); INSERT INTO test_array_min_text VALUES (NULL), (ARRAY['hello', 'holo', 'blackhole', 'array']); SELECT c1, array_min (c1) FROM test_array_min_text;
返回结果如下。
c1 | array_min ------------------------------+----------- \N |\N {hello,holo,blackhole,array} | array (2 rows)
ARRAY_CONTAINS
描述:确认数组是否包含指定值。
array_contains(array, target_value)
使用说明:
仅Hologres V1.3.19及以上版本支持该函数。
说明若您Hologres实例的版本较低,请您使用实例升级或加入Hologres钉钉交流群反馈,详情请参见如何获取更多的在线支持?。
返回值说明
返回BOOLEAN类型,如果数组若包含指定值,则返回
true
,反之返回false
。示例
CREATE TABLE test_array_contains_text ( c1 text[], c2 text ); INSERT INTO test_array_contains_text VALUES (ARRAY[NULL, 'cs', 'holo', 'sql', 'a', NULL, ''], 'holo') , (ARRAY['holo', 'array', 'FE', 'l', NULL, ''], 'function'); SELECT c1, c2, array_contains (c1, c2) FROM test_array_contains_text;
返回结果如下。
c1 | c2 | array_contains --------------------------+----------+---------------- {holo,array,FE,l,"",""} | function | f {"",cs,holo,sql,a,"",""} | holo | t (2 rows)
ARRAY_EXCEPT
描述:获取不包含指定数组元素的数组。
array_except(array1, array2)
使用说明:
仅Hologres V1.3.19及以上版本支持该函数。
说明若您Hologres实例的版本较低,请您使用实例升级或加入Hologres钉钉交流群反馈,详情请参见如何获取更多的在线支持?。
返回值说明
返回ARRAY类型。
示例
CREATE TABLE test_array_except_text ( c1 text[], c2 text[] ); INSERT INTO test_array_except_text VALUES (ARRAY['o', 'y', 'l', 'l', NULL, ''], NULL), (ARRAY['holo', 'hello', 'hello', 'SQL', '', 'blackhole'], ARRAY['holo', 'SQL', NULL, 'kk']); SELECT c1, c2, array_except (c1, c2) FROM test_array_except_text;
返回结果如下。
c1 | c2 | array_except -------------------------------------+------------------+------------------- {o,y,l,l,"",""} | | {o,l,y,""} {holo,hello,hello,SQL,"",blackhole} | {holo,SQL,"",kk} | {blackhole,hello} (2 rows)
ARRAY_DISTINCT
描述:去除数组中的重复元素。
array_distinct(array)
使用说明:
仅Hologres V1.3.19及以上版本支持该函数。
说明若您Hologres实例的版本较低,请您使用实例升级或加入Hologres钉钉交流群反馈,详情请参见如何获取更多的在线支持?。
返回值说明
返回ARRAY类型。
示例
CREATE TABLE test_array_distinct_text ( c1 text[] ); INSERT INTO test_array_distinct_text VALUES (ARRAY['holo', 'hello', 'holo', 'SQL', 'SQL']), (ARRAY[]::text[]); SELECT c1, array_distinct (c1) FROM test_array_distinct_text;
返回结果如下。
c1 | array_distinct ---------------------------+------------------ {holo,hello,holo,SQL,SQL} | {SQL,hello,holo} {} | {NULL} (2 rows)
ARRAY_UNION
描述:将两个数组聚合为一个新的数组,且不含重复元素。
array_union(array1, array2)
使用说明:
仅Hologres V1.3.19及以上版本支持该函数。
说明若您Hologres实例的版本较低,请您使用实例升级或加入Hologres钉钉交流群反馈,详情请参见如何获取更多的在线支持?。
返回值说明
返回ARRAY类型。
示例
CREATE TABLE test_array_union_int ( c1 int[], c2 int[] ); INSERT INTO test_array_union_int VALUES (NULL, ARRAY[2, -3, 2, 7]), (ARRAY[2, 7, -3, 2, 7], ARRAY[12, 9, 8, 7]); SELECT c1, c2, array_union (c1, c2) FROM test_array_union_int;
返回结果如下。
c1 | c2 | array_union --------------+------------+----------------- \N | {2,-3,2,7} | {2,7,-3} {2,7,-3,2,7} | {12,9,8,7} | {9,2,7,8,12,-3} (2 rows)
REGEXP_MATCH
描述:对字符串按正则表达式进行匹配,如果存在则会在结果数组中表示出来。
REGEXP_MATCH(<str> TEXT, <pattern> TEXT)
参数说明
str:必填,待匹配的字符串。
pattern:必填,正则表达式。
返回值说明
返回ARRAY类型。
示例
SELECT regexp_match('foobarbequebaz', '(bar)(beque)');
返回结果如下。
regexp_match ------------ {bar,beque}
REGEXP_SPLIT_TO_ARRAY
描述:字符串分割函数,按正则表达式对字符串进行分割并转换成数组。
REGEXP_SPLIT_TO_ARRAY(<str> TEXT, <pattern> TEXT)
参数说明
str:必填,待分割的字符串。
pattern:必填,定义了如何分割字符串的正则表达式。正则表达式中的特殊字符和构造将用于识别字符串中需要作为分隔点的位置。
返回值说明
返回ARRAY类型。
示例
CREATE TABLE interests_test ( name text, intrests text ); INSERT INTO interests_test VALUES ('张三', '唱歌,跳舞'), ('李四', '踢球,跑步,画画'), ('王五', '插花,书法,弹琴,睡觉'); SELECT name, REGEXP_SPLIT_TO_ARRAY(intrests, ',') FROM interests_test;
返回结果如下。
name | regexp_split_to_array ---------------------------- 张三 | {唱歌,跳舞} 李四 | {踢球,跑步,画画} 王五 | {插花,书法,弹琴,睡觉}
操作符
操作符 | 返回类型 | 描述 | 用例 | 结果 |
@> | BOOLEAN | 判断两个数组是否为包含关系。 |
| t |
<@ | BOOLEAN | 判断两个数组是否为被包含关系。 |
| f |
&& | BOOLEAN | 判断两个数组是否有相同元素。 说明 Hologres从V1.3.37版本开始支持Array列作为输入。 |
| t |